package thread.ch02;

/**
 * 重进入<br />
 * 当一个线程请求其他线程已经占有的锁时，请求线程将被堵塞。然而内部锁是可重进入的，因此线程在试图获得它自己占有的锁时，请求会成功。重进入意味着锁的请求是基于
 * “每线程”，而不是基于“每调用”的。重进入的实现是通过为每个锁关联一个请求计数和一个占有它的线程。当计数为0时，认为锁是未被占有的。
 * 线程请求一个未被占有的锁时
 * ，JVM将记录锁的占有者，并且将请求计数置为1.如果同一线程再次请求这个锁，计数将递增；每次占用线程退出同步块,计数器值将递减。直到计数器达到0时
 * ，锁被释放。
 * 
 * @author Edgar Zhang
 * 
 */
public class LoggingWidget extends Widget {

	@Override
	public synchronized void doSomething() {
		System.out.println(toString() + ": calling doSomething");
		super.doSomething();
	}
}

class Widget {
	public synchronized void doSomething() {

	}
}
